'''
Created on 02/mag/2010

@author: Simock85
'''
import os
from Immagine import Immagine
from WebInt import WebInt
import database
import config
import threading
from datetime import datetime
import tempfile
import shutil

#variabili di portabilita'
if not os.path.exists("portable"): #se esiste la cartella il sw diventa portable
    path_cfg=os.path.expanduser(os.path.normcase('~/.BBUploader'))
    tmpdir=tempfile.gettempdir()
    portable=0
else:
    path_cfg=os.path.abspath("portable")
    tmpdir=path_cfg+os.sep+"temp"
    os.makedirs(tmpdir)
    portable=1
    
#variabili globali
pathf_cfg=path_cfg+os.path.normcase("/BBU.cfg")
pathf_db=path_cfg+os.path.normcase("/BBU.db")
db=[]
opzioni=[]
ver = 0.9 #versione del software

#classe controller
class Controller():
    def __init__ (self, frame):
        self.frame=frame
        self.Controlli()
        self.Apridb()
    
    #metodi preliminari eseguiti dal costruttore
        
    def Controlli(self):
        if not os.path.exists(path_cfg):
            os.makedirs(path_cfg)
        #controllo di versione, eventuale riscrittura del config
        if not os.path.exists(pathf_cfg) or config.contVer(pathf_cfg) < ver:
            config.salva(pathf_cfg, 800, 95, "None", "None", ver)
            print "Config riscritto"
        if not os.path.exists(pathf_db):
            db=open(pathf_db, "w")
            db.close()
        
    
    def Apridb(self):
        global db
        db=database.read(pathf_db)
        print db
        
    #medodi di strato controller
    
    def Check(self): # wxGlade: MyFrame.<event_handler>
        oggetto=WebInt()
        if oggetto.pinger()==1:
            self.frame.TxtStatusBar("ImageShack: raggiungibile")
        elif oggetto.pinger()==0:
            self.frame.TxtStatusBar("ImageShack: NON raggiungibile")
            self.frame.bitmap_button_1.Enable(False)
        
    def ControllaDim(self, path):
        dim=Immagine(path, 800, 95)
        if dim.dimensione() == 1:
            return 1
        else:
            return 0
        
    def ThreadUpload(self, path, rid, tit):
        th=threading.Thread(target=self.Upload, args=(path, rid, tit))
        th.start()
        
    def Upload(self, path, rid, tit):
        im=Immagine(path, opzioni[0], opzioni[1], path_r=tmpdir)
        exif=im.ExifExtractor()
        up=WebInt()
        if rid == True:
            path=im.ridimensiona()
        link=up.ImageShack(path, opzioni[2], opzioni[3])
        if link == "error":        
            self.frame.TxtDx("!! ERRORE nel caricamento !!", "", "", "")           
        else:
            self.TxtDx(link[0], link[1], exif[0], exif[1], exif[2])
            ora=self.Ora()
            self.DbNew(tit, ora, link, exif)
            self.PopolaLista()
            
    def Ora(self):
        ora=datetime.now()
        ora="%02d/%02d/%02d - %02d:%02d" % (ora.day, ora.month, ora.year, ora.hour, ora.minute)
        return ora
            
    def PopolaLista(self):
        self.frame.PopolaLista(db)
            
    def ElSelez(self, indice):
        lista=db[indice]
        self.TxtDx(lista[2], lista[3], lista[4], lista[5], lista[6])
            
    def TxtDx(self, link, min, exif0, exif1, exif2):
        bb_im="[IMG]%s[/IMG]" % (link)
        bb_min="[URL=%s][IMG]%s[/IMG][/URL]" % (link, min)
        exif="%s\n%s\n%s" % (exif0, exif1, exif2)
        self.frame.TxtDx(link, bb_im, bb_min, exif)
            
    #medodi di gestione .db e .conf
    
    
    def DbNew(self, tit, ora, link, exif):
        db_ent=[tit, ora, link[0], link[1], exif[0], exif[1], exif[2]]
        global db
        db.append(db_ent)
    
    def __del__ (self):
        database.write(pathf_db, db)
        if portable==1:
            shutil.rmtree(tmpdir)
        
    def LeggiOpz(self):
        global opzioni
        opzioni=config.leggi(pathf_cfg)
        self.frame.spin_ctrl_1.SetValue(opzioni[0])
        self.frame.spin_ctrl_2.SetValue(opzioni[1])
        self.frame.text_ctrl_7.SetValue(opzioni[2])
        self.frame.text_ctrl_8.SetValue(opzioni[3])
        print opzioni
        
    def SalvaOpz(self):
        dim=self.frame.spin_ctrl_1.GetValue()
        comp=self.frame.spin_ctrl_2.GetValue()
        user=self.frame.text_ctrl_7.GetValue()
        pwd=self.frame.text_ctrl_8.GetValue()
        config.salva(pathf_cfg, dim, comp, user, pwd, ver)
        self.LeggiOpz()
            
        